package com.cwrl.spider.protocol.base;

import com.cwrl.spider.protocol.base.inter.IProductModelListener;
import com.cwrl.spider.protocol.base.vo.IotDevice;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;
import java.util.function.Supplier;

/**
 * 产品物模型
 */
@Slf4j
public class ProductModelListener implements IProductModelListener {

    /**
     * 设备注册
     */
    public void register(Supplier<IotDevice> supplier) {
        log.info("设备[{}],注册成功", supplier.get().getName());
    }

    /**
     * 设备注销
     */
    public void unregister(Supplier<IotDevice> supplier) {
        log.info("设备[{}],注销成功", supplier.get().getName());
    }

    /**
     * 设备状态事件
     * @return
     */
    public void deviceStatusEvent(IotDevice iotDevice, String status) {
        log.info("设备[{}],状态更新成 -> {}", iotDevice.getName(), status);
    }

    /**
     * 设备属性更新  name,value
     */
    public void devicePropertyEvent(IotDevice iotDevice, String name, String value) {
        log.info("设备[{}],属性[{}]更新成[{}]", iotDevice.getName(), name, value);
    }

    /**
     * 批量设备属性更新  name,value
     */
    public void devicePropertyEvent(IotDevice iotDevice, Map<String, String> properties) {
        for (Map.Entry<String, String> property : properties.entrySet()) {
            log.info("设备[{}],属性[{}]更新成[{}]", iotDevice.getName(), property.getKey(), property.getValue());
        }
    }

    /**
     * 告警事件 告警  level 为  1.一般 2.紧急 3.重要
     */
    public void deviceAlarmEvent(IotDevice iotDevice, String level, String alertType, String alarmInfo) {
        log.info("设备[{}],发出级别为[{}]的告警[{}]", iotDevice.getName(), level, alarmInfo);
    }

}
